#include <stdio.h>

#define SIZE 300

int reverse(int n)
{
    int m = 0;
    int q;
    q = n;
    while (n)
    {
        m = m * 10 + n % 10;
        n /= 10;
    }
    if (m == q)
    {
        return 1;
    }
    else
        return 0;
}

int prime(int n)
{
    int i;
    for (i = 2; i * i <= n; i++)
    {
        if (n % i == 0)
            return 0;
    }
    return 1;
}

int main()
{
    int n, i, j;
    int a[SIZE] = {0};
    scanf("%d", &n);
    for (i = 2, j = 0; i <= n; i++) // 判断素数
    {
        if (prime(i))
            a[j++] = i;
    }
    int len = j;
    // 判断回文数
    for (i = 0; i < len; i++)
    {
        if(!reverse(a[i]))
            a[i] = 0;
    }
    // 输出数据
    for (i = 0; i < len; i++)
    {
        if (a[i] != 0)
            printf("%d\n", a[i]);
    }
    return 0;
}

// 判断回文数
    /* int tmp1, tmp2, b[SIZE] = {0};
    int b_len, k, r;
    for (i = 0; i < len; i++) // 遍历数组a
    {
        tmp2 = a[i];
        j = 0;
        while (tmp2) // 拆分数字
        {
            b[j++] = tmp2 % 10;
            tmp2 /= 10;
        }
        b_len = j;
        // 循环比较
        for (k = 0, r = b_len - 1; k <= r; k++, r--)
        {
            if (b[k] != b[r])
            {
                a[i] = 0;
                break;
            }
        }
    } */